{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "import pandas as pd\n",
    "import matplotlib.pyplot as plt\n",
    "import numpy as np\n",
    "import seaborn as sns\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [],
   "source": [
    "train=pd.read_csv('train.csv')\n",
    "test=pd.read_csv('test.csv')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(15398, 6)"
      ]
     },
     "execution_count": 3,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "train.shape"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(10237, 4)"
      ]
     },
     "execution_count": 4,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "test.shape"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>user</th>\n",
       "      <th>event</th>\n",
       "      <th>invited</th>\n",
       "      <th>timestamp</th>\n",
       "      <th>interested</th>\n",
       "      <th>not_interested</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>3044012</td>\n",
       "      <td>1918771225</td>\n",
       "      <td>0</td>\n",
       "      <td>2012-10-02 15:53:05.754000+00:00</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>3044012</td>\n",
       "      <td>1502284248</td>\n",
       "      <td>0</td>\n",
       "      <td>2012-10-02 15:53:05.754000+00:00</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>3044012</td>\n",
       "      <td>2529072432</td>\n",
       "      <td>0</td>\n",
       "      <td>2012-10-02 15:53:05.754000+00:00</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>3044012</td>\n",
       "      <td>3072478280</td>\n",
       "      <td>0</td>\n",
       "      <td>2012-10-02 15:53:05.754000+00:00</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>3044012</td>\n",
       "      <td>1390707377</td>\n",
       "      <td>0</td>\n",
       "      <td>2012-10-02 15:53:05.754000+00:00</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "      user       event  invited                         timestamp  interested  \\\n",
       "0  3044012  1918771225        0  2012-10-02 15:53:05.754000+00:00           0   \n",
       "1  3044012  1502284248        0  2012-10-02 15:53:05.754000+00:00           0   \n",
       "2  3044012  2529072432        0  2012-10-02 15:53:05.754000+00:00           1   \n",
       "3  3044012  3072478280        0  2012-10-02 15:53:05.754000+00:00           0   \n",
       "4  3044012  1390707377        0  2012-10-02 15:53:05.754000+00:00           0   \n",
       "\n",
       "   not_interested  \n",
       "0               0  \n",
       "1               0  \n",
       "2               0  \n",
       "3               0  \n",
       "4               0  "
      ]
     },
     "execution_count": 5,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "train.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>user</th>\n",
       "      <th>event</th>\n",
       "      <th>invited</th>\n",
       "      <th>timestamp</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>1776192</td>\n",
       "      <td>2877501688</td>\n",
       "      <td>0</td>\n",
       "      <td>2012-11-30 11:39:01.230000+00:00</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>1776192</td>\n",
       "      <td>3025444328</td>\n",
       "      <td>0</td>\n",
       "      <td>2012-11-30 11:39:01.230000+00:00</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>1776192</td>\n",
       "      <td>4078218285</td>\n",
       "      <td>0</td>\n",
       "      <td>2012-11-30 11:39:01.230000+00:00</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>1776192</td>\n",
       "      <td>1024025121</td>\n",
       "      <td>0</td>\n",
       "      <td>2012-11-30 11:39:01.230000+00:00</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>1776192</td>\n",
       "      <td>2972428928</td>\n",
       "      <td>0</td>\n",
       "      <td>2012-11-30 11:39:21.985000+00:00</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "      user       event  invited                         timestamp\n",
       "0  1776192  2877501688        0  2012-11-30 11:39:01.230000+00:00\n",
       "1  1776192  3025444328        0  2012-11-30 11:39:01.230000+00:00\n",
       "2  1776192  4078218285        0  2012-11-30 11:39:01.230000+00:00\n",
       "3  1776192  1024025121        0  2012-11-30 11:39:01.230000+00:00\n",
       "4  1776192  2972428928        0  2012-11-30 11:39:21.985000+00:00"
      ]
     },
     "execution_count": 6,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "test.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "<class 'pandas.core.frame.DataFrame'>\n",
      "RangeIndex: 15398 entries, 0 to 15397\n",
      "Data columns (total 6 columns):\n",
      "user              15398 non-null int64\n",
      "event             15398 non-null int64\n",
      "invited           15398 non-null int64\n",
      "timestamp         15398 non-null object\n",
      "interested        15398 non-null int64\n",
      "not_interested    15398 non-null int64\n",
      "dtypes: int64(5), object(1)\n",
      "memory usage: 721.9+ KB\n"
     ]
    }
   ],
   "source": [
    "train.info()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Events 出现的次数为：\n",
      "955398943     242\n",
      "2007279414    196\n",
      "2529072432    187\n",
      "1269035551    147\n",
      "1600413013    114\n",
      "1390707377     99\n",
      "1076364848     98\n",
      "1532377761     96\n",
      "2149464820     89\n",
      "268233790      80\n",
      "952519340      73\n",
      "1203717384     63\n",
      "3632072502     56\n",
      "3849306291     54\n",
      "1902753965     54\n",
      "2130616732     53\n",
      "719337372      49\n",
      "633659090      48\n",
      "1816813281     46\n",
      "2643833505     44\n",
      "907302600      43\n",
      "2498491194     42\n",
      "3309338938     40\n",
      "2073609284     39\n",
      "3276213471     39\n",
      "1133385189     38\n",
      "771676713      37\n",
      "2153037761     37\n",
      "1361307272     34\n",
      "2401458775     34\n",
      "             ... \n",
      "2788558996      1\n",
      "1456576726      1\n",
      "1616400535      1\n",
      "915963444       1\n",
      "949639326       1\n",
      "1617301663      1\n",
      "906531778       1\n",
      "1095829668      1\n",
      "508940306       1\n",
      "3868530854      1\n",
      "3701319848      1\n",
      "4193771689      1\n",
      "2297721003      1\n",
      "3281475758      1\n",
      "1401579696      1\n",
      "1729385316      1\n",
      "807481523       1\n",
      "2480213940      1\n",
      "937969852       1\n",
      "1943998655      1\n",
      "1959602368      1\n",
      "2759090369      1\n",
      "3892508532      1\n",
      "278368455       1\n",
      "3811881163      1\n",
      "3472605389      1\n",
      "2769506511      1\n",
      "3889211600      1\n",
      "4208685267      1\n",
      "306511872       1\n",
      "Name: event, Length: 8846, dtype: int64\n"
     ]
    }
   ],
   "source": [
    "#查看events出现的情况\n",
    "print('Events 出现的次数为：')\n",
    "print(train['event'].value_counts())"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 69,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "13418"
      ]
     },
     "execution_count": 69,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#抽取出在训练和测试集合上出现的events\n",
    "uniqueUsers = set()\n",
    "uniqueEvents = set()\n",
    "for filename in [\"train.csv\", \"test.csv\"]:\n",
    "    f = open(filename, 'rb')\n",
    "    #忽略第一行（列名字）\n",
    "    f.readline().strip().decode().split(',')\n",
    "    \n",
    "    for line in f:    #对每条记录\n",
    "        cols = line.strip().decode().split(\",\")\n",
    "        uniqueUsers.add(cols[0])   #第一列为用户ID\n",
    "        uniqueEvents.add(cols[1])   #第二列为活动ID\n",
    "        \n",
    "        #eventsForUser[cols[0]].add(cols[1])    #该用户参加了这个活动\n",
    "        #usersForEvent[cols[1]].add(cols[0])    #该活动被用户参加\n",
    "    f.close()\n",
    "len(uniqueEvents)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 197,
   "metadata": {},
   "outputs": [],
   "source": [
    "f=open('events.csv','rb')\n",
    "columns=f.readline().strip().decode('utf-8').split(',')\n",
    "train_data=pd.DataFrame(columns=columns)\n",
    "i=0\n",
    "for line in f:\n",
    "    cols=line.strip().decode('utf-8').split(',')\n",
    "    if cols[0] in uniqueEvents:\n",
    "        train_data.loc[i]=cols\n",
    "        i+=1\n",
    "f.close()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 198,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(13418, 110)"
      ]
     },
     "execution_count": 198,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "train_data.shape"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 202,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>event_id</th>\n",
       "      <th>user_id</th>\n",
       "      <th>start_time</th>\n",
       "      <th>city</th>\n",
       "      <th>state</th>\n",
       "      <th>zip</th>\n",
       "      <th>country</th>\n",
       "      <th>lat</th>\n",
       "      <th>lng</th>\n",
       "      <th>c_1</th>\n",
       "      <th>...</th>\n",
       "      <th>c_92</th>\n",
       "      <th>c_93</th>\n",
       "      <th>c_94</th>\n",
       "      <th>c_95</th>\n",
       "      <th>c_96</th>\n",
       "      <th>c_97</th>\n",
       "      <th>c_98</th>\n",
       "      <th>c_99</th>\n",
       "      <th>c_100</th>\n",
       "      <th>c_other</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>684921758</td>\n",
       "      <td>3647864012</td>\n",
       "      <td>2012-10-31T00:00:00.001Z</td>\n",
       "      <td></td>\n",
       "      <td></td>\n",
       "      <td></td>\n",
       "      <td></td>\n",
       "      <td></td>\n",
       "      <td></td>\n",
       "      <td>2</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>9</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>244999119</td>\n",
       "      <td>3476440521</td>\n",
       "      <td>2012-11-03T00:00:00.001Z</td>\n",
       "      <td></td>\n",
       "      <td></td>\n",
       "      <td></td>\n",
       "      <td></td>\n",
       "      <td></td>\n",
       "      <td></td>\n",
       "      <td>2</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>7</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>3928440935</td>\n",
       "      <td>517514445</td>\n",
       "      <td>2012-11-05T00:00:00.001Z</td>\n",
       "      <td></td>\n",
       "      <td></td>\n",
       "      <td></td>\n",
       "      <td></td>\n",
       "      <td></td>\n",
       "      <td></td>\n",
       "      <td>0</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>12</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>2582345152</td>\n",
       "      <td>781585781</td>\n",
       "      <td>2012-10-30T00:00:00.001Z</td>\n",
       "      <td></td>\n",
       "      <td></td>\n",
       "      <td></td>\n",
       "      <td></td>\n",
       "      <td></td>\n",
       "      <td></td>\n",
       "      <td>1</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>8</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>1051165850</td>\n",
       "      <td>1016098580</td>\n",
       "      <td>2012-09-27T00:00:00.001Z</td>\n",
       "      <td></td>\n",
       "      <td></td>\n",
       "      <td></td>\n",
       "      <td></td>\n",
       "      <td></td>\n",
       "      <td></td>\n",
       "      <td>1</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>9</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>5 rows × 110 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "     event_id     user_id                start_time city state zip country  \\\n",
       "0   684921758  3647864012  2012-10-31T00:00:00.001Z                          \n",
       "1   244999119  3476440521  2012-11-03T00:00:00.001Z                          \n",
       "2  3928440935   517514445  2012-11-05T00:00:00.001Z                          \n",
       "3  2582345152   781585781  2012-10-30T00:00:00.001Z                          \n",
       "4  1051165850  1016098580  2012-09-27T00:00:00.001Z                          \n",
       "\n",
       "  lat lng c_1   ...   c_92 c_93 c_94 c_95 c_96 c_97 c_98 c_99 c_100 c_other  \n",
       "0           2   ...      0    1    0    0    0    0    0    0     0       9  \n",
       "1           2   ...      0    0    0    0    0    0    0    0     0       7  \n",
       "2           0   ...      0    0    0    0    0    0    0    0     0      12  \n",
       "3           1   ...      0    0    0    0    0    0    0    0     0       8  \n",
       "4           1   ...      0    0    0    0    0    0    0    0     0       9  \n",
       "\n",
       "[5 rows x 110 columns]"
      ]
     },
     "execution_count": 202,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "train_data.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 216,
   "metadata": {},
   "outputs": [
    {
     "ename": "ValueError",
     "evalue": "labels ['event_id' 'user_id' 'start_time' 'city' 'state' 'zip' 'country' 'lat'\n 'lng'] not contained in axis",
     "output_type": "error",
     "traceback": [
      "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m",
      "\u001b[1;31mValueError\u001b[0m                                Traceback (most recent call last)",
      "\u001b[1;32m<ipython-input-216-9aebf6744437>\u001b[0m in \u001b[0;36m<module>\u001b[1;34m()\u001b[0m\n\u001b[1;32m----> 1\u001b[1;33m \u001b[0mtrain_data\u001b[0m\u001b[1;33m=\u001b[0m\u001b[0mtrain_data\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mdrop\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mcolumns\u001b[0m\u001b[1;33m[\u001b[0m\u001b[1;36m0\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;36m9\u001b[0m\u001b[1;33m]\u001b[0m\u001b[1;33m,\u001b[0m\u001b[0maxis\u001b[0m\u001b[1;33m=\u001b[0m\u001b[1;36m1\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m",
      "\u001b[1;32mg:\\software\\python3.6\\lib\\site-packages\\pandas\\core\\generic.py\u001b[0m in \u001b[0;36mdrop\u001b[1;34m(self, labels, axis, index, columns, level, inplace, errors)\u001b[0m\n\u001b[0;32m   2528\u001b[0m         \u001b[1;32mfor\u001b[0m \u001b[0maxis\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mlabels\u001b[0m \u001b[1;32min\u001b[0m \u001b[0maxes\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mitems\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m   2529\u001b[0m             \u001b[1;32mif\u001b[0m \u001b[0mlabels\u001b[0m \u001b[1;32mis\u001b[0m \u001b[1;32mnot\u001b[0m \u001b[1;32mNone\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m-> 2530\u001b[1;33m                 \u001b[0mobj\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mobj\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0m_drop_axis\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mlabels\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0maxis\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mlevel\u001b[0m\u001b[1;33m=\u001b[0m\u001b[0mlevel\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0merrors\u001b[0m\u001b[1;33m=\u001b[0m\u001b[0merrors\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m   2531\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m   2532\u001b[0m         \u001b[1;32mif\u001b[0m \u001b[0minplace\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n",
      "\u001b[1;32mg:\\software\\python3.6\\lib\\site-packages\\pandas\\core\\generic.py\u001b[0m in \u001b[0;36m_drop_axis\u001b[1;34m(self, labels, axis, level, errors)\u001b[0m\n\u001b[0;32m   2560\u001b[0m                 \u001b[0mnew_axis\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0maxis\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mdrop\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mlabels\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mlevel\u001b[0m\u001b[1;33m=\u001b[0m\u001b[0mlevel\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0merrors\u001b[0m\u001b[1;33m=\u001b[0m\u001b[0merrors\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m   2561\u001b[0m             \u001b[1;32melse\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m-> 2562\u001b[1;33m                 \u001b[0mnew_axis\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0maxis\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mdrop\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mlabels\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0merrors\u001b[0m\u001b[1;33m=\u001b[0m\u001b[0merrors\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m   2563\u001b[0m             \u001b[0mdropped\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mreindex\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;33m**\u001b[0m\u001b[1;33m{\u001b[0m\u001b[0maxis_name\u001b[0m\u001b[1;33m:\u001b[0m \u001b[0mnew_axis\u001b[0m\u001b[1;33m}\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m   2564\u001b[0m             \u001b[1;32mtry\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n",
      "\u001b[1;32mg:\\software\\python3.6\\lib\\site-packages\\pandas\\core\\indexes\\base.py\u001b[0m in \u001b[0;36mdrop\u001b[1;34m(self, labels, errors)\u001b[0m\n\u001b[0;32m   3742\u001b[0m             \u001b[1;32mif\u001b[0m \u001b[0merrors\u001b[0m \u001b[1;33m!=\u001b[0m \u001b[1;34m'ignore'\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m   3743\u001b[0m                 raise ValueError('labels %s not contained in axis' %\n\u001b[1;32m-> 3744\u001b[1;33m                                  labels[mask])\n\u001b[0m\u001b[0;32m   3745\u001b[0m             \u001b[0mindexer\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mindexer\u001b[0m\u001b[1;33m[\u001b[0m\u001b[1;33m~\u001b[0m\u001b[0mmask\u001b[0m\u001b[1;33m]\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m   3746\u001b[0m         \u001b[1;32mreturn\u001b[0m \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mdelete\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mindexer\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n",
      "\u001b[1;31mValueError\u001b[0m: labels ['event_id' 'user_id' 'start_time' 'city' 'state' 'zip' 'country' 'lat'\n 'lng'] not contained in axis"
     ]
    }
   ],
   "source": [
    "train_data=train_data.drop(columns[0:9],axis=1)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 217,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(13418, 101)"
      ]
     },
     "execution_count": 217,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#去掉前面几个特征后的数据\n",
    "train_data.shape"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 218,
   "metadata": {},
   "outputs": [],
   "source": [
    "from sklearn.cluster import MiniBatchKMeans\n",
    "from sklearn import metrics\n",
    "K=[10,20,30,40,50,60,70,80,90,100]\n",
    "CH_scores=[]\n",
    "for i in K:\n",
    "    mb_kmeans=MiniBatchKMeans(n_clusters=i)\n",
    "    mb_kmeans.fit(train_data)\n",
    "    CH_score = metrics.silhouette_score(train_data,mb_kmeans.predict(train_data))\n",
    "    CH_scores.append(CH_score)\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 219,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.plot(np.array(K),CH_scores)\n",
    "plt.xlabel('K class')\n",
    "plt.ylabel('CH_scores')\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "从上面图可以看出：K随着数目增大分数逐渐降低，因此我们选择K=10为最佳"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 253,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "colors = ['b','g','r','k','c','m','y','#e24fff','#524C90','#845868']\n",
    "\n",
    "n_clusters = 10\n",
    "mb_kmeans = MiniBatchKMeans(n_clusters = n_clusters)\n",
    "mb_kmeans.fit(train_data)\n",
    "\n",
    "y_train_pred = mb_kmeans.labels_\n",
    "cents = mb_kmeans.cluster_centers_#质心\n",
    "for i in range(n_clusters):\n",
    "    index = np.nonzero(y_train_pred==i)[0]\n",
    "    x1 = train_data.iloc[index,0]\n",
    "    x2 = train_data.iloc[index,1]\n",
    "    plt.scatter(x1,x2)\n",
    "plt.show()"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.6.5"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
